#include "Controlador.h"

#include <fstream>
#include <iostream>

Controlador::Controlador()
{
	//this->dirDados = "./dados/";
	//this->CarregaLogins();
	BDLivro bdLivro;
}

Controlador::~Controlador()
{

}

void Controlador::Init()
{

}

void Controlador::CarregaLogins()
{
	string nomecompleto = dirDados+"logins.txt";
	fstream arq(nomecompleto.c_str(), ios::in);
	if(!arq.is_open())
	{
		cerr << endl << "Erro ao abrir aquivo de login!";
		return;
    }

	string login, senha, tipo,linha;
	size_t pos;
	//Logins.clear(); // zera arvore, caso voce carregue novamente!
	while( !arq.eof() )
	{
		getline(arq,linha);
		pos = linha.find(';');
		login = linha.substr(0, pos);
		senha = linha.substr(pos+1);
		//Logins.insert(make_pair(login,senha)); //Insere par de valores login e senha!!!
	}
	arq.close();
}

Usuario Controlador::CheckLogin(string _login, string _senha)
{
	Usuario usuario;
	string senha_correta;
	//senha_correta = Logins[login];
	//if(usu.GetID() == -1) // Usu�rio n�o cadastrado!
	//	return usu;

	if(senha_correta == _senha)
	{
		// Captura usuario
		// Providorio!!
		usuario.SetLogin(_login);
		usuario.SetSenha(_senha);
		usuario.SetID(10);
		//return usu;
	}
	return usuario;
}

long Controlador::GetProximoLivroID()
{
	return 1l;
}

void Controlador::AdicionaLivro(Livro _novoLivro)
{

}

Livro Controlador::SelecionaLivro(long _id)
{
	Livro l;
	return l;
}


void Controlador::AtualizaLivrosVendidos(CarrinhoCompra _carrinhoCompra)
{

}

void Controlador::RegistraVenda(CarrinhoCompra _carrinhoCompra)
{

}

Logrador Controlador::PesquisaCEP(string _cep)
{
	Logrador rua;

	return rua;
}


void Controlador::RegistraUsuario(Usuario _usuario)
{

	this->usuarioCorrente = _usuario;

}

void Controlador::CarregaLogradores()
{

}

Usuario Controlador::GetUsuario()
{
	return this->usuarioCorrente;
}

void Controlador::AtualizaCliente(Usuario _cliente)
{

	this->usuarioCorrente = _cliente;

	//TODO: Fazer salvar nos arquivos de interesse

}

void Controlador::MontaPesquista(Interesse::ENUM_INTERESSE _tipoInteresse)
{

	switch(_tipoInteresse){

	case Interesse::TEMA:

		break;
	case Interesse::AUTOR:

		while(!this->bdLivro.Final()){
			Livro livro = this->bdLivro.GetItem();
			this->arvoreInteresse.Insere(livro.GetAutor(), livro);
			this->bdLivro.Proximo();
		}

		break;

	case Interesse::TITULO:

		break;

	case Interesse::DESCONHECIDO:
		break;

	}

}

vector<Livro> Controlador::PesquisaInteresses(string _valor)
{
	vector<Livro> resultado;

	resultado = this->arvoreInteresse.Seleciona(_valor);

	return resultado;
}

